/*
    尚硅谷
    输出100以内所有的质数
    实现方式 1
 */
public class PrimeNumberTest01 {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();

        for (int i = 2; i < 10000; i++) {
            boolean flag = true;
            for (int j = 2; j <= Math.sqrt(i); j++) {
                if (i % j == 0){
                    flag = false;
                    break;
                }//一旦被整除,抛出,判断下一个数
            }
            if (flag)System.out.print(i + " ");
            flag = true;
        }

        //1-1稿 70ms
/*        for (int i = 1; i < 100; i++) {
            for (int j = i-1; j > 0; j--) {
                if (j == 1)System.out.print(i + " ");//直到1之前都没有被抛出,就是质数
                if (i % j == 0)break;//一旦被整除,抛出,判断下一个数
            }
        }*/
        //1-2标记位思想  *重置flag 72ms
/*        boolean flag = true;
        for (int i = 2; i < 100; i++) {
            for (int j = 2; j < i; j++) {
                if (i % j == 0){
                    flag = false;
                    break;
                }
            }
            if (flag)System.out.print(i + " ");
            flag = true;//*注意 必须要重置flag,否则无法输出
        }*/
        //2优化一 break;已经考虑到;  -只对非质数的自然数有效  -数据10万量级能差距10倍
        //3-1优化二! (j <= i/2)
        /*       
         -对所有自然数有效
         -一个数的全部非质(素)余数的范围是?该数的1/2之前
         -再节省一半时间
         */
        //3-2优化二! (j <= Math.sqrt(i))
        /*
         -对质数更有效
         -一个数的成对非质(素)余数其中之一的最小范围是?该数的sqrt()及之前
         -循环再减少1~2量级的时间,但是sout会缩小这种差距
        */
        long end = System.currentTimeMillis();
        System.out.println(end - start);
    }
}
